package com.ypan.creator;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @Author ypan
 * @Date on 2021/3/11  16:49
 * @Desc 将一个复杂对象分布创建。如果一个超大的类的属性特别多，
 * 我们可以把属性分门别类，不同属性组成一个稍微小一点的类，
 * 再把好几个稍微小点的类窜起来。比方说一个电脑，可以分成不同的稍微小点的部分CPU、主板、
 * 显示器。CPU、主板、显示器分别有更多的组件，不再细分。
 */
public class Builder {
    @Data
    static
    class Computer{
        private Cpu cpu;

        private MainBoard mainBoard;
    }

    @Data
    @AllArgsConstructor
    static
    class Cpu{
        private String name;

        private String price;
    }

    @Data
    @AllArgsConstructor
    static
    class MainBoard{
        private String name;

        private String price;
    }

    abstract class ComputerBuilder{
        abstract void buildCpu();
        abstract void buildMainBoard();

    }

    class XiaoMiBuilder extends ComputerBuilder{

        private Computer computer = new Computer();

        void buildCpu() {
            computer.setCpu(new Cpu("intel","100"));
        }

        void buildMainBoard() {
            computer.setMainBoard(new MainBoard("intel","100"));
        }
    }
}
